有時候會遇到在刪除RecyclerView需要做點的效果的時候,這時候便能使用ItemTouchHelper來達成各式滑動效果,通過使用它可以讓RecyclerView的使用更加生動,下面開始說明ItemTouchHelper使用的步驟。
ItemTouchHelper下有很多方法,所以在使用ItemTouchHelper可以先創建一個callBack來將需要的方法拿出來,這邊取得滑動與移動的方法。
public class RecyclerViewTouchHelper extends ItemTouchHelper.Callback {
    private final ItemTouchHelperCallBack itemTouchHelperCallBack;
    public RecyclerViewTouchHelper(ItemTouchHelperCallBack callBack) {
        this.itemTouchHelperCallBack = callBack;
    }
    @Override
    public boolean isItemViewSwipeEnabled() {
        return super.isItemViewSwipeEnabled();
    }
    //控制移動
    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
        itemTouchHelperCallBack.onMove(viewHolder.getAdapterPosition(),target.getAdapterPosition());
        return true;
    }
    //控制滑動
    @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
        itemTouchHelperCallBack.onDelete(viewHolder.getAdapterPosition());
    }
    @Override
    public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
        return 0;
    }
    public interface ItemTouchHelperCallBack {
        void onDelete(int positon);
        void onMove(int fromPosition, int toPosition);
    }
}
完成後通過以下設置便能將ItemTouchHelper套入我們的RecyclerView。
mRecyclerView.setLayoutManager(layoutManager);
ItemTouchHelper.Callback callback=new RecyclerViewTouchHelper(mAdapter);
ItemTouchHelper itemTouchHelper=new ItemTouchHelper(callback);
itemTouchHelper.attachToRecyclerView(mRecyclerView);
mRecyclerView.setAdapter(mAdapter);
最後在Adapter去實作RecyclerViewTouchHelper.ItemTouchHelperCallBack便能在Adapter下控制在move、swpie時要做的動作,通過先前傳回的positon便能知道當下在操作的item的位置,如此便能對該position做操作達到我們要的效果。